With the use of safe language platforms, such as the Java programming language, to develop more sophisticated applications for a wide-range of environments, pressure to make more system programming features available to application developers is increasing. A particular area in which safe language platforms lag behind operating system functionalities is that of resource management.
Managing resources used by applications running on a virtual machine platform (i.e., a platform including a virtual machine that allows applications to execute on that platform regardless of the platform the application is originally programmed to execute) plays an important role in controlling over-use of resources, preventing denial of service attacks, and providing load balancing within the system. A resource is a measurable entity that a program needs in order to perform necessary functionalities (e.g., memory, CPU time, etc.).
Conventionally, management of resources at the virtual machine level is handled by the operating system. In order to manage multithreading and thread priorities, most modern implementations of virtual machines rely on kernel threads and the associated kernel thread scheduler to implement these functionalities. In some instances, allowing the operating system to manage resources used by applications executing on the virtual machine causes the virtual machine to lose control of the resources.
For example, it may be necessary to partition CPU time among groups of threads executing in the same virtual machine. A group of threads executing in the same virtual machine may be referred to as an “isolate.” Specifically, two isolates may execute in an isolate-enabled virtual machine and the first isolate should be allocated twenty percent of the CPU resources while the other isolate is allocated the remaining eighty percent. To provide such allocation, management and control of isolate resources within the virtual machine is required instead of relying on management of application resources using kernel level resource management at the operating system level.